#include <stdio.h>

//CONTA os digitos do numero
int contaDigito(int *numero){
    int i = 0;
    
    do{
        i++;
    } while (numero[i] != -1);
    
    return i-1;
}

//Funcao que IMPRIME um vetor de numeros
void imprime(int *numero){
    int i = 0, fim = 0;
    
    //Percorre o vetor imprimindo os valores ateh encontrar um -1
    do {
        printf("%d", numero[i]);
        i++;
        if (numero[i] == -1) fim = 1;
    } while (fim == 0);
}

//Funcao que ESPELHA um vetor de numeros
void inverteVetor (int *vetor){
    int vetorCopia[51], tamanhoVetor;
    
    //Descobre o tamanho do vetor passado
    tamanhoVetor = contaDigito(vetor);
    
    //Copia o vetor
    for (int j = 0; j <= tamanhoVetor; j++) {
        vetorCopia[j] = vetor[j];
    }
    
    //Espelha o vetor
    for (int i = 0; i <= tamanhoVetor; i++) {
        vetor[tamanhoVetor-i] = vetorCopia[i];
    }
}

//Funcao que faz a SOMA dos numeros de dois vetores
void soma(int *primeiroNumero, int *segundoNumero, int *resultadoSoma){
    int vai = 0, i = 0, terminou = 0;
    
    //Soma os numeros posicao por posicao
    do {
        //Verifica se algum dos numeros terminou
        if (primeiroNumero[i] == -1) {
            resultadoSoma[i] = segundoNumero[i] + vai;
            terminou++;
        }
        else if (segundoNumero[i] == -1) {
            resultadoSoma[i] = primeiroNumero[i] + vai;
            terminou++;
        }
        
        //Soma normalmente
        else {
            resultadoSoma[i] = (primeiroNumero[i] + segundoNumero[i] + vai)%10;
                vai = (primeiroNumero[i] + segundoNumero[i] + vai)/10;
        }
        
        //Se os 2 numeros terminaram coloca o -1 para indicar o final, senao incrementa a posicao
        if (terminou == 2) resultadoSoma[i] = -1;
        else i++;
        
    } while (terminou != 2);
}

//Funcao que ZERA o vetor dado
void zeraVetor(int *vetor){
    for (int i = 0; i<50; i++) {
        vetor[i] = 0;
    }
}

//Funcao que MULTIPLICA os numeros
void multiplica(int *primeiroNumero, int *segundoNumero, int *resultadoMultiplicacao, int *resultadoAuxiliar){
    int vai = 0, i = 0, j = 0;
    resultadoMultiplicacao[1] = -1;
    
    imprime(segundoNumero);
    //Multiplica os numeros posicao por posicao
    while (primeiroNumero[j] != -1) {
        while (segundoNumero[i] != -1) {
            resultadoAuxiliar[i+j] = (primeiroNumero[j] * segundoNumero[i] + vai)%10;
            vai = (primeiroNumero[j] * segundoNumero[i] + vai)/10;
            i++;
        }
        resultadoAuxiliar[i+j] = -1;
        soma(resultadoMultiplicacao, resultadoAuxiliar, resultadoMultiplicacao);
        zeraVetor(resultadoAuxiliar);
        i = 0;
        j++;
    }
    
    //Marca o final do resultado
    resultadoMultiplicacao[j] = -1;
}

int main ()
{
    int primeiroNumero[51], segundoNumero[51], resultadoSoma[51], resultadoMultiplicacao[102], resultadoAuxiliar[62], n, j = 0, k = 0;
    
    //Zera os vetores
    zeraVetor(primeiroNumero);
    zeraVetor(segundoNumero);
    zeraVetor(resultadoSoma);
    zeraVetor(resultadoMultiplicacao);
    zeraVetor(resultadoAuxiliar);
    
    // Le o primeiro numero
     do {
        scanf("%d", &n);
        primeiroNumero[j] = n;
        j++;
     } while (n != -1);
    
    // Le o segundo numero
    do {
        scanf("%d", &n);
        segundoNumero[k] = n;
        k++;
    } while (n != -1);
    
    //Imprime os numeros
    imprime(primeiroNumero);
    printf("\n");
    imprime(segundoNumero);
    printf("\n");
    
    //Inverte os vetores para fazer a soma e a multiplicacao
    inverteVetor(primeiroNumero);
    inverteVetor(segundoNumero);
    
    //Soma e imprime o resultado, inverte o resultado e imprime
    soma(primeiroNumero, segundoNumero, resultadoSoma);
    inverteVetor(resultadoSoma);
    imprime(resultadoSoma);
    printf("\n");

    //Multiplica e imprime o resultado, inverte o resultado e imprime
    multiplica(primeiroNumero, segundoNumero, resultadoMultiplicacao, resultadoAuxiliar);
    inverteVetor(resultadoMultiplicacao);
    imprime(resultadoMultiplicacao);
    printf("\n");
    
}

